#include "Contracts.h"
#include "Tools.h"
#include "OptCtrlTools.h"
#include "OptUiTools.h"

const bool CContrac::Init(const void * pvdPara, char * pszMsgTxt, int iMsgTxtSize)
{
	char szGuid[CHAR_LEN_32] = { 0 };
	FrameTools().SysFun().GetGuid(szGuid, sizeof(szGuid));
	m_ptrLock = FrameTools().LockSet().GetLock(szGuid);
	CREATE_QUOTATION_GUI(m_ptrQuotationGui, szGuid)
	m_bInitFlg = m_ptrQuotationGui != nullptr && m_ptrLock != nullptr;
	if (m_bInitFlg)
	{
		ValueSet().SetValue(CONTRACT_FORM, 0);
		ValueSet().SetValue("LastOrderTime", 0);
		ValueSet().SetValue("RISK_FLG", false);
		ValueSet().List("Result").SetValue("LATEST_ENQRY_TIME", -1);
		ValueSet().List("Result").SetValue("ENQRY_NO", -1);
		m_ptrQuotationGui->SetContract(this);
	}		
    return m_bInitFlg;
}

void CContrac::ProcessUi(const char * pszValues)
{
}

string CContrac::GetPos(const char * pszType, string & strPos)
{
	strPos = "";
	ValueSet().GetValue(pszType, strPos);
	return strPos;
}

void CContrac::SetPos(const char * pszType, const char * pszValue)
{
	ValueSet().SetValue(pszType, string(pszValue));
}

IStkItem * CContrac::GetStkItem()
{
	IStkItem * ptrRetVal = nullptr;
	IBaseObject * ptrVal = nullptr;
	if (!ValueSet().GetValue("StkItem", &ptrVal)) return nullptr;
	ptrRetVal = dynamic_cast<IStkItem *>(ptrVal);
	return ptrRetVal;
}

void CContrac::SetStkItem(IStkItem * ptrStkItem)
{
	ValueSet().SetValue("StkItem", ptrStkItem);
}

const char * CContrac::GetOptCode()
{
	return m_strOptCode.c_str();
}

void CContrac::SetOptCode(const char * pszOptCode)
{
	m_strOptCode = pszOptCode;
}

const char * CContrac::GetOptNum()
{
	return m_strOptNum.c_str();
}

void CContrac::SetOptNum(const char * pszOptNum)
{
	m_strOptNum = pszOptNum;
}

const char * CContrac::GetExerciseDate()
{
	return m_strExerciseDate.c_str();
}

void CContrac::SetExerciseDate(const char * pszOptNum)
{
	m_strExerciseDate = pszOptNum;
}

const char * CContrac::GetExercisePrice()
{
	return m_strExercisePrice.c_str();
}

void CContrac::SetExercisePrice(const char * pszOptNum)
{
	m_strExercisePrice = pszOptNum;
}

const char * CContrac::GetOptType()
{
	return m_strOptType.c_str();
}

void CContrac::SetOptType(const char * pszOptNum)
{
	m_strOptType = pszOptNum;
}

int CContrac::GetRecNo()
{
	return m_iRecNo;
}

void CContrac::SetRecNo(int iRecNo)
{
	m_iRecNo = iRecNo;
}

IQuotationGui & CContrac::QuotationGui()
{
	return *m_ptrQuotationGui.get();
}

void CContrac::DisposeEntrust(const char * pszMsgTxt)
{
	ITaskQueue * ptrQueue;
	m_ptrLock->Lock();
	HWND hRetVal = OptUiTools().FormHwnd().GetContractFormHwnd(Self());
	ptrQueue = &ValueSet().Queue(ENTRUST_INFO_QUEUE);
	if (!hRetVal)
	{
		hRetVal = OptUiTools().FormHwnd().GetMainFormHwnd();
		ptrQueue = &OptCtrlTools().StkTrdCtrl().ValueSet().Queue(ENTRUST_INFO_QUEUE);
	}
	ptrQueue->Push(pszMsgTxt);
	::SendMessageA(hRetVal ? hRetVal : OptUiTools().FormHwnd().GetMainFormHwnd(), MSG_REFRESH_Ag_L3030101, (WPARAM)ptrQueue, 0);
__end:
	m_ptrLock->Unlock();
	return;
}

